import os 
import json
import sys
import time
from dao import *

#定义数据存储位置
ROOT_DIR=os.path.join(os.path.dirname(os.path.abspath(__file__)),"database") 
#定义用户信息文件
USER_INFO_FILE=os.path.join(ROOT_DIR,"users.json")
ADMIN_INFO_FILE=os.path.join(ROOT_DIR,"admin.json")
BOOK_INFO_FILE=os.path.join(ROOT_DIR,"books.json")

#初始化
def init():
    if not os.path.exists(ROOT_DIR):
        os.makedirs(ROOT_DIR)  # 如果目录不存在，则创建目录

    with open(os.path.join(ROOT_DIR, "users.json"), "w") as f:
        f.write(json.dumps([]))

    with open(os.path.join(ROOT_DIR, "admin.json"), "w") as f:
        f.write(json.dumps({"username": "admin", "password": "admin"}))

    with open(os.path.join(ROOT_DIR, "books.json"), "w") as f:
        f.write(json.dumps([]))
# =============================管理员部分==========================================
admin_bar = '''
1、登录
2、图书上架
3、用户管理
q、退出
'''

## 图书上架
def inBooks():
    book_id = input("请输入图书ID：")
    book_name = input("请输入图书名称：")
    data = read_data(BOOK_INFO_FILE) # 读取当前已有的图书列表
    for i in data:
        if i["图书ID"] == book_id:
            print("当前图书已上架")
            return
    data.append({"图书ID": book_id, "图书名称": book_name, "状态": "就绪"})
    write_data(BOOK_INFO_FILE, data)
    print("图书上架成功")

## 用户管理
def userUpdate():
    pass

# ============================用户部分===================================
user_bar = '''
1、我的信息
2、我的图书
3、借阅图书
4、归还图书
5、登录
6、注册
7、退出
'''
## 用户登录检查   装饰器
def checkLogin(func):   # func是一个函数
    def wrapper(*args, **kwargs): # *args表示任意数量的参数，**kwargs表示任意数量的关键字参数
        if not current_user: # 如果当前用户为空，则表示未登录
            userLogin()      # 调用登录函数
        else:
            func(*args, **kwargs) # 否则调用传入的函数
    return wrapper            # 返回一个函数


## 我的信息
def userInfo():
    print("开发中")
## 图书列表
def listBooks():
    books=read_data(BOOK_INFO_FILE)
    if not books:
        print("当前没有图书")
        return
    for book in books:
        print(f"图书ID:{book['图书ID']},图书名称:{book['图书名称']},状态:{book['状态']}")

## 我的图书
@checkLogin
def userBooks():
    print("当前用户是：",current_user)
    users=read_data(USER_INFO_FILE)
    for user in users:
        if user["用户名"]==current_user:
            for book in user["图书列表"]:
                print(f"图书ID:{book}")
            return
         
## 借阅图书
@checkLogin
def userBookTo():
   
    listBooks()  # 显示图书列表
    book_id = input("请输入要借阅的图书ID：")
    books = read_data(BOOK_INFO_FILE)
    for i in books:
        if i["图书ID"] == book_id and i["状态"] == "就绪":
            i["状态"] = "借出"
            write_data(BOOK_INFO_FILE, books)
            # 将这本书的信息添加到用户的图书列表中
            users=read_data(USER_INFO_FILE)
            print("当前用户是：",current_user)
           
            for user in users:
                print("user当前用户是：",user["用户名"])
                if user["用户名"] == current_user:
                    user["图书列表"].append(book_id) # 添加图书ID 
                    write_data(USER_INFO_FILE, users) # 更新用户信息
                    print("借阅成功")
                    return 
       
            
## 归还图书
@checkLogin
def userBookBack():
    userBooks() # 显示我的图书
    book_id = input("请输入要归还的图书ID：")
    # 读取图书列表 用于修改图书状态
    books = read_data(BOOK_INFO_FILE) 
    for i in books:
        if i["图书ID"] == book_id and i["状态"] == "借出":
            i["状态"] = "就绪"
            write_data(BOOK_INFO_FILE, books) # 更新图书信息
            # 将这本书的信息从用户的图书列表中删除
            users=read_data(USER_INFO_FILE)
            for user in users:
                if user["用户名"] == current_user:
                    user["图书列表"].remove(book_id)
                    write_data(USER_INFO_FILE, users) # 更新用户信息
                    print("归还成功")
                    return  
                    
## 注册
def userReg():
    username = input("请输入用户名：")
    passwd = input("请输入密码：")
    users = read_data(USER_INFO_FILE)
    print(users)
    if users:
        for i in users: # 如果某个值为真，则表示用户存在
            if i["用户名"] == username:
                print("当前用户已存在")
                return
        users.append({"用户名": username, "密码": passwd, "图书列表": []})
        write_data(USER_INFO_FILE, users)
    else:
        users.append({"用户名": username, "密码": passwd, "图书列表": []})
        write_data(USER_INFO_FILE, users)
        print(f"用户{username}注册成功")
    
## 登录
def userLogin():
    global current_user  # 声明全局变量
    username = input("请输入用户名：")
    passwd = input("请输入密码：")
    users = read_data(USER_INFO_FILE)
    for i in users:
        if i["用户名"] == username and i["密码"] == passwd:
            print(f"用户{username}登录成功")
            current_user = username 
## 管理员登录
def adminLogin():
    username = input("请输入用户名：")
    passwd = input("请输入密码：")
    admin = read_data(ADMIN_INFO_FILE)
    if admin["username"] == username and admin["password"] == passwd:
        print(f"管理员{username}登录成功")  
    else:
        print("用户名或密码错误")
        return
## 管理员退出
def adminExit():
    sys.exit(0)

## 退出
def userExit():
    sys.exit(0)

if __name__ == "__main__":
    # init()     # 初始化
    # inBooks()  # 图书上架
    # listBooks()# 图书列表  
    # userReg()  # 注册
    # userLogin()# 登录
    # listBooks()    # 显示图书列表y
    # userBookTo()   # 借阅图书
    # userBooks()    # 我的图书
    # userBookBack() # 归还图书
    # userBooks()    # 我的图书
    '''
    选择用户
    1，管理员
    2，用户
    '''
    while True:
        choice = input("请选择用户：1、管理员 2、用户\n")
        if choice == "1":
            print("管理员")
            while True:
                print(admin_bar)
                choice = input("请输入您的选择：")
                if choice == "1":
                    adminLogin()
                elif choice == "2":
                    inBooks()
                elif choice == "3":
                    userUpdate()
                elif choice == "q":
                    adminExit()
                else:
                    print("输入有误，请重新输入")
                    continue
                time.sleep(1)
                os.system("cls")
            break
        elif choice == "2":
            print("用户")
            current_user = None
            while True:
                print(user_bar)
                choice = input("请输入您的选择：")
                if choice == "1":
                    userInfo()
                elif choice == "2":
                    userBooks()
                elif choice == "3":
                    userBookTo()
                elif choice == "4":
                    userBookBack()
                elif choice == "5":
                    userLogin()
                elif choice == "6":
                    userReg()
                elif choice == "7":
                    userExit()
                else:
                    print("输入有误，请重新输入")
                    continue
                time.sleep(1)
                os.system("cls") # os.system("clear") # windows中时cls 
            break
        else:
            print("输入有误，请重新输入")
            continue


        